package cn.edu.fzu.homemaking.service;

import cn.edu.fzu.homemaking.domain.entity.DateCount;
import cn.edu.fzu.homemaking.domain.entity.Order;
import cn.edu.fzu.homemaking.domain.entity.Statistics;
import cn.edu.fzu.homemaking.domain.enums.CommentStatusEnum;
import cn.edu.fzu.homemaking.domain.enums.OrderStatusEnum;
import cn.edu.fzu.homemaking.domain.vo.OrderVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author jiebin
 * @date 2023/4/7
 */

public interface OrderService {
    /**
     * 生成订单
     * @param companyId
     * @param userId
     * @param demandId
     * @param serverId
     * @param description
     * @param customerName
     * @param address
     * @param phone
     * @param email
     * @param startTime
     * @param price
     * @param qty
     */
    void insert(Long companyId, Long userId, Long demandId, Long serverId, String description, String customerName,
                String address, String phone, String email, String startTime, BigDecimal price, Integer qty);

    /**
     * 获取订单列表
     * @param companyId
     * @param userId
     * @param demandId
     * @param serverId
     * @param startTime
     * @param endTime
     * @param status
     * @return
     */
    List<OrderVo> list(Long companyId, Long userId, Long demandId, Long serverId,
                       String startTime, String endTime, OrderStatusEnum status,
                       CommentStatusEnum commentStatus);

    /**
     * 获取用户待支付的钱
     * @param usrId
     * @return
     */
    BigDecimal getUnPayMoney(Long usrId);
    /**
     * 更新订单状态
     * @param orderId
     * @param status
     * @param companyId
     * @param customerId
     */
    void updateStatus(String orderId, OrderStatusEnum status, Long customerId, Long companyId);
    /**
     * 更新订单评价状态
     * @param orderId
     * @param commentStatus
     */
    void updateCommentStatus(String orderId, CommentStatusEnum commentStatus);
    /**
     * 根据订单id获取订单
     * @param orderId
     * @return
     */
    OrderVo selectByOrderId(String orderId);

    /**
     * 获取多个订单信息
     * @param orderIds
     * @param startTime
     * @param endTime
     * @param status
     * @return
     */
    List<Order> listByOrderIds(List<String> orderIds, String startTime, String endTime, OrderStatusEnum status);

    /**
     * 统计订单
     * @param startTime
     * @param endTime
     * @param companyId
     * @return
     */
    Statistics count(String startTime, String endTime, Long companyId);


    /**
     * 按月统计
     * @param startTime
     * @param endTime
     * @param companyId
     * @return
     */
    List<DateCount>countByMonth(String startTime, String endTime, Long companyId);


    /**
     * 按天统计
     * @param startTime
     * @param endTime
     * @param companyId
     * @return
     */
    List<DateCount>countByDay(String startTime, String endTime, Long companyId);

}
